Most types of computing systems require memory, e.g. an element with the ability to store data or instructions. In some considerations, memory can be divided into two broad categories: volatile and non-volatile memory. Both volatile and non-volatile memories alike are fundamental in most computing systems. Example families of memories common in computing systems include static random access memory (SRAM), dynamic random access memory (DRAM), electrically erasable programmable read-only memory (EEPROM), NOR flash memory, NAND flash memory, phase change memory (PCM), hard drive memory, and even compact disc read-only memory (CD-ROM).
In a very general sense, computing systems perform operations on data values. Data values may range from bits of compiled program code for performing some specific operations to pixel values for pictures stored on cell phone or computer. Regardless of the data values in question, computing systems generally need data values to operate. Memories provide a way to make data values accessible to processing components.
Also in a general sense, memory systems usually support basic operations including read, write, and erase. Some systems are read only. A read operation obtains a data value stored at a particular address in the memory system. A write operation puts a new value in a particular address in the memory system. An erase operation resets the value at a particular address to an erased value, such as 1 or 0 in different cases. Because memory systems come in numerous different sizes or capacities, a way to access the every address in the memory may not be simple.
In many memory systems, the entire memory systems may be divided into rows and columns such that memory bits get row and column addresses that can be combined into a general memory address. Addresses may map to specific activations of rows and columns in the memory systems in order to access the bits on the selected rows and columns. However, generally there are more row and column lines in a memory system than bits in an address field. Thus, encoding and decoding of memory addresses in order to access every row and column in a memory system is common in many types of memory systems.
The electronics and organizations used for memory address encoding present numerous challenges in creating improved memory systems.